{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from os import environ\n",
    "\n",
    "environ['optimizer'] = 'Adam'\n",
    "environ['num_workers']= '2'\n",
    "environ['batch_size']= '8192'\n",
    "environ['n_epochs']= '1500'\n",
    "environ['batch_norm']= 'True'\n",
    "environ['loss_func']='MAPE'\n",
    "environ['layers'] = '600 350 200 180'\n",
    "environ['dropouts'] = '0.3 '*4\n",
    "environ['log'] = 'False'\n",
    "environ['weight_decay'] = '0.01'\n",
    "environ['cuda_device'] ='cuda:0'\n",
    "environ['dataset'] = '/data/scratch/mmerouani/data/speedup_dataset_research_batch1001-2000.pkl'\n",
    "\n",
    "%run utils.ipynb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading data\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 305800/305800 [08:44<00:00, 583.33it/s] \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data loaded\n",
      "(305800, 3592)\n"
     ]
    }
   ],
   "source": [
    "print(\"loading data\")\n",
    "\n",
    "train_dl, val_dl, test_dl = train_dev_split(dataset,val_size=10000, test_size=10000, batch_size=batch_size, num_workers=num_workers, log=log)\n",
    "# train_dl, val_dl, test_dl = train_dev_split_filter(dataset,val_size=10000, test_size=10000, batch_size=batch_size, num_workers=num_workers, log=log, speedup_lo_bound=0.2)\n",
    "db = fai.basic_data.DataBunch(train_dl, val_dl, test_dl, device=device)\n",
    "\n",
    "print(\"data loaded\")\n",
    "print(val_dl.dataset.X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_size = train_dl.dataset.X.shape[1]\n",
    "output_size = train_dl.dataset.Y.shape[1]\n",
    "\n",
    "model = None \n",
    "\n",
    "if batch_norm:\n",
    "    model = Model_BN_Tanh(input_size, output_size, hidden_sizes=layers_sizes, drops=drops)\n",
    "else:\n",
    "    model = Model(input_size, output_size)\n",
    "\n",
    "# model = nn.DataParallel(model)\n",
    "# model.to(device)\n",
    "\n",
    "if loss_func == 'MSE':\n",
    "    criterion = nn.MSELoss()\n",
    "else:\n",
    "    criterion = mape_criterion\n",
    "\n",
    "l = fai.basic_train.Learner(db, model, loss_func=criterion, metrics=[mape_criterion, rmse_criterion],\n",
    "                            callback_fns=[partial(EarlyStoppingCallback, mode='min', \n",
    "                            monitor='mape_criterion', min_delta=0, patience=150)],silent=True)\n",
    "\n",
    "if optimizer == 'SGD':\n",
    "    l.opt_func = optim.SGD \n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "l.lr_find()\n",
    "l.recorder.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "lr = 1e-02"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "        <style>\n",
       "            /* Turns off some styling */\n",
       "            progress {\n",
       "                /* gets rid of default border in Firefox and Opera. */\n",
       "                border: none;\n",
       "                /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "                background-size: auto;\n",
       "            }\n",
       "            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "                background: #F44336;\n",
       "            }\n",
       "        </style>\n",
       "      <progress value='1375' class='' max='1500', style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      91.67% [1375/1500 3:01:49<16:31]\n",
       "    </div>\n",
       "    \n",
       "\n",
       "\n",
       "    <div>\n",
       "        <style>\n",
       "            /* Turns off some styling */\n",
       "            progress {\n",
       "                /* gets rid of default border in Firefox and Opera. */\n",
       "                border: none;\n",
       "                /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "                background-size: auto;\n",
       "            }\n",
       "            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "                background: #F44336;\n",
       "            }\n",
       "        </style>\n",
       "      <progress value='2' class='' max='2', style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      100.00% [2/2 00:00<00:00]\n",
       "    </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1375: early stopping\n"
     ]
    }
   ],
   "source": [
    "l.fit_one_cycle(1500, lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "l.recorder.plot_losses()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "l.save(f\"speedup_{optimizer}_batch_norm_{batch_norm}_{loss_func}_nlayers_{len(layers_sizes)}_log_{log}_batch1001-2000_Tanh\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "val_df = get_results_df(val_dl, l.model)\n",
    "train_df = get_results_df(train_dl, l.model)\n",
    "test_df = get_results_df(test_dl, l.model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>prediction</th>\n",
       "      <th>target</th>\n",
       "      <th>abs_diff</th>\n",
       "      <th>APE</th>\n",
       "      <th>SMAPE</th>\n",
       "      <th>interchange</th>\n",
       "      <th>tile</th>\n",
       "      <th>unroll</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>10000.00000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>1.000000e+04</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>4999.50000</td>\n",
       "      <td>0.394191</td>\n",
       "      <td>0.438427</td>\n",
       "      <td>8.568693e-02</td>\n",
       "      <td>26.503281</td>\n",
       "      <td>29.168121</td>\n",
       "      <td>0.757900</td>\n",
       "      <td>0.940400</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2886.89568</td>\n",
       "      <td>0.337495</td>\n",
       "      <td>0.384616</td>\n",
       "      <td>1.351669e-01</td>\n",
       "      <td>31.023388</td>\n",
       "      <td>35.832699</td>\n",
       "      <td>0.428376</td>\n",
       "      <td>0.236756</td>\n",
       "      <td>0.433034</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.004559</td>\n",
       "      <td>1.341105e-07</td>\n",
       "      <td>0.000069</td>\n",
       "      <td>0.000069</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2499.75000</td>\n",
       "      <td>0.083929</td>\n",
       "      <td>0.086719</td>\n",
       "      <td>1.185125e-02</td>\n",
       "      <td>6.467367</td>\n",
       "      <td>6.493939</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>4999.50000</td>\n",
       "      <td>0.273976</td>\n",
       "      <td>0.309265</td>\n",
       "      <td>3.979424e-02</td>\n",
       "      <td>15.677621</td>\n",
       "      <td>15.987193</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>7499.25000</td>\n",
       "      <td>0.725162</td>\n",
       "      <td>0.775881</td>\n",
       "      <td>1.058810e-01</td>\n",
       "      <td>35.185925</td>\n",
       "      <td>37.432458</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>9999.00000</td>\n",
       "      <td>0.995968</td>\n",
       "      <td>2.645030</td>\n",
       "      <td>1.661787e+00</td>\n",
       "      <td>337.824738</td>\n",
       "      <td>200.000015</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             index    prediction        target      abs_diff           APE  \\\n",
       "count  10000.00000  10000.000000  10000.000000  1.000000e+04  10000.000000   \n",
       "mean    4999.50000      0.394191      0.438427  8.568693e-02     26.503281   \n",
       "std     2886.89568      0.337495      0.384616  1.351669e-01     31.023388   \n",
       "min        0.00000      0.000000      0.004559  1.341105e-07      0.000069   \n",
       "25%     2499.75000      0.083929      0.086719  1.185125e-02      6.467367   \n",
       "50%     4999.50000      0.273976      0.309265  3.979424e-02     15.677621   \n",
       "75%     7499.25000      0.725162      0.775881  1.058810e-01     35.185925   \n",
       "max     9999.00000      0.995968      2.645030  1.661787e+00    337.824738   \n",
       "\n",
       "              SMAPE   interchange          tile        unroll  \n",
       "count  10000.000000  10000.000000  10000.000000  10000.000000  \n",
       "mean      29.168121      0.757900      0.940400      0.750000  \n",
       "std       35.832699      0.428376      0.236756      0.433034  \n",
       "min        0.000069      0.000000      0.000000      0.000000  \n",
       "25%        6.493939      1.000000      1.000000      0.750000  \n",
       "50%       15.987193      1.000000      1.000000      1.000000  \n",
       "75%       37.432458      1.000000      1.000000      1.000000  \n",
       "max      200.000015      1.000000      1.000000      1.000000  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>prediction</th>\n",
       "      <th>target</th>\n",
       "      <th>abs_diff</th>\n",
       "      <th>APE</th>\n",
       "      <th>SMAPE</th>\n",
       "      <th>interchange</th>\n",
       "      <th>tile</th>\n",
       "      <th>unroll</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>10000.00000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>14999.50000</td>\n",
       "      <td>0.390927</td>\n",
       "      <td>0.434748</td>\n",
       "      <td>0.089760</td>\n",
       "      <td>22.783415</td>\n",
       "      <td>26.247038</td>\n",
       "      <td>0.782900</td>\n",
       "      <td>0.947300</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2886.89568</td>\n",
       "      <td>0.328884</td>\n",
       "      <td>0.526266</td>\n",
       "      <td>0.371606</td>\n",
       "      <td>28.276480</td>\n",
       "      <td>37.316029</td>\n",
       "      <td>0.412292</td>\n",
       "      <td>0.223445</td>\n",
       "      <td>0.433034</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>10000.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.004063</td>\n",
       "      <td>0.000002</td>\n",
       "      <td>0.001350</td>\n",
       "      <td>0.001350</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>12499.75000</td>\n",
       "      <td>0.079395</td>\n",
       "      <td>0.088260</td>\n",
       "      <td>0.009581</td>\n",
       "      <td>5.546226</td>\n",
       "      <td>5.550054</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>14999.50000</td>\n",
       "      <td>0.309840</td>\n",
       "      <td>0.323237</td>\n",
       "      <td>0.032796</td>\n",
       "      <td>13.120615</td>\n",
       "      <td>13.334513</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>17499.25000</td>\n",
       "      <td>0.688677</td>\n",
       "      <td>0.683457</td>\n",
       "      <td>0.081927</td>\n",
       "      <td>28.336584</td>\n",
       "      <td>28.041982</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>19999.00000</td>\n",
       "      <td>0.997759</td>\n",
       "      <td>6.865816</td>\n",
       "      <td>5.873831</td>\n",
       "      <td>368.158966</td>\n",
       "      <td>200.000015</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             index    prediction        target      abs_diff           APE  \\\n",
       "count  10000.00000  10000.000000  10000.000000  10000.000000  10000.000000   \n",
       "mean   14999.50000      0.390927      0.434748      0.089760     22.783415   \n",
       "std     2886.89568      0.328884      0.526266      0.371606     28.276480   \n",
       "min    10000.00000      0.000000      0.004063      0.000002      0.001350   \n",
       "25%    12499.75000      0.079395      0.088260      0.009581      5.546226   \n",
       "50%    14999.50000      0.309840      0.323237      0.032796     13.120615   \n",
       "75%    17499.25000      0.688677      0.683457      0.081927     28.336584   \n",
       "max    19999.00000      0.997759      6.865816      5.873831    368.158966   \n",
       "\n",
       "              SMAPE   interchange          tile        unroll  \n",
       "count  10000.000000  10000.000000  10000.000000  10000.000000  \n",
       "mean      26.247038      0.782900      0.947300      0.750000  \n",
       "std       37.316029      0.412292      0.223445      0.433034  \n",
       "min        0.001350      0.000000      0.000000      0.000000  \n",
       "25%        5.550054      1.000000      1.000000      0.750000  \n",
       "50%       13.334513      1.000000      1.000000      1.000000  \n",
       "75%       28.041982      1.000000      1.000000      1.000000  \n",
       "max      200.000015      1.000000      1.000000      1.000000  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val_df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>prediction</th>\n",
       "      <th>target</th>\n",
       "      <th>abs_diff</th>\n",
       "      <th>APE</th>\n",
       "      <th>SMAPE</th>\n",
       "      <th>interchange</th>\n",
       "      <th>tile</th>\n",
       "      <th>unroll</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>162899.500000</td>\n",
       "      <td>0.393799</td>\n",
       "      <td>0.414619</td>\n",
       "      <td>0.050819</td>\n",
       "      <td>13.886036</td>\n",
       "      <td>16.100962</td>\n",
       "      <td>0.768034</td>\n",
       "      <td>0.944097</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>82503.497805</td>\n",
       "      <td>0.329845</td>\n",
       "      <td>0.446321</td>\n",
       "      <td>0.277433</td>\n",
       "      <td>16.936615</td>\n",
       "      <td>26.703373</td>\n",
       "      <td>0.422088</td>\n",
       "      <td>0.229734</td>\n",
       "      <td>0.433013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>20000.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.002826</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>91449.750000</td>\n",
       "      <td>0.085116</td>\n",
       "      <td>0.089102</td>\n",
       "      <td>0.006253</td>\n",
       "      <td>3.846730</td>\n",
       "      <td>3.856774</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>162899.500000</td>\n",
       "      <td>0.306052</td>\n",
       "      <td>0.313525</td>\n",
       "      <td>0.019789</td>\n",
       "      <td>8.693050</td>\n",
       "      <td>8.750660</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>234349.250000</td>\n",
       "      <td>0.700192</td>\n",
       "      <td>0.700698</td>\n",
       "      <td>0.052250</td>\n",
       "      <td>17.140782</td>\n",
       "      <td>17.573806</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>305799.000000</td>\n",
       "      <td>0.999007</td>\n",
       "      <td>26.579260</td>\n",
       "      <td>25.600668</td>\n",
       "      <td>336.051819</td>\n",
       "      <td>200.000015</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               index     prediction         target       abs_diff  \\\n",
       "count  285800.000000  285800.000000  285800.000000  285800.000000   \n",
       "mean   162899.500000       0.393799       0.414619       0.050819   \n",
       "std     82503.497805       0.329845       0.446321       0.277433   \n",
       "min     20000.000000       0.000000       0.002826       0.000000   \n",
       "25%     91449.750000       0.085116       0.089102       0.006253   \n",
       "50%    162899.500000       0.306052       0.313525       0.019789   \n",
       "75%    234349.250000       0.700192       0.700698       0.052250   \n",
       "max    305799.000000       0.999007      26.579260      25.600668   \n",
       "\n",
       "                 APE          SMAPE    interchange           tile  \\\n",
       "count  285800.000000  285800.000000  285800.000000  285800.000000   \n",
       "mean       13.886036      16.100962       0.768034       0.944097   \n",
       "std        16.936615      26.703373       0.422088       0.229734   \n",
       "min         0.000000       0.000000       0.000000       0.000000   \n",
       "25%         3.846730       3.856774       1.000000       1.000000   \n",
       "50%         8.693050       8.750660       1.000000       1.000000   \n",
       "75%        17.140782      17.573806       1.000000       1.000000   \n",
       "max       336.051819     200.000015       1.000000       1.000000   \n",
       "\n",
       "              unroll  \n",
       "count  285800.000000  \n",
       "mean        0.750000  \n",
       "std         0.433013  \n",
       "min         0.000000  \n",
       "25%         0.750000  \n",
       "50%         1.000000  \n",
       "75%         1.000000  \n",
       "max         1.000000  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "gdf_t=pd.DataFrame(train_df.groupby(['name']).mean())\n",
    "gdf_v=pd.DataFrame(val_df.groupby(['name']).mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 3600x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sorted_df=val_df.sort_values(by=[\"target\"])\n",
    "label=list(sorted_df.index)\n",
    "mape=sorted_df['APE']\n",
    "index = np.arange(len(label))\n",
    "plt.figure(figsize=(50,10))\n",
    "plt.bar(index, mape)\n",
    "plt.xlabel('function', fontsize=5)\n",
    "plt.ylabel('mape', fontsize=5)\n",
    "plt.xticks(index, label, fontsize=5, rotation=30)\n",
    "plt.title('-')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sorted_df=gdf_t.sort_values(by=[\"target\"])\n",
    "label=list(sorted_df.index)\n",
    "mape=sorted_df['APE']\n",
    "index = np.arange(len(label))\n",
    "plt.figure(figsize=(50,10))\n",
    "plt.bar(index, mape)\n",
    "plt.xlabel('function', fontsize=5)\n",
    "plt.ylabel('mape', fontsize=5)\n",
    "plt.xticks(index, label, fontsize=5, rotation=30)\n",
    "plt.title('-')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>prediction</th>\n",
       "      <th>target</th>\n",
       "      <th>abs_diff</th>\n",
       "      <th>APE</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>32.000000</td>\n",
       "      <td>32.0</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>32.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.937293</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.062707</td>\n",
       "      <td>6.270669</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.137371</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.137371</td>\n",
       "      <td>13.737098</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.188108</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.012252</td>\n",
       "      <td>1.225227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.951671</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.029568</td>\n",
       "      <td>2.956811</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.962544</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.037456</td>\n",
       "      <td>3.745565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.970432</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.048329</td>\n",
       "      <td>4.832852</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.987748</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.811892</td>\n",
       "      <td>81.189194</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       prediction  target   abs_diff        APE\n",
       "count   32.000000    32.0  32.000000  32.000000\n",
       "mean     0.937293     1.0   0.062707   6.270669\n",
       "std      0.137371     0.0   0.137371  13.737098\n",
       "min      0.188108     1.0   0.012252   1.225227\n",
       "25%      0.951671     1.0   0.029568   2.956811\n",
       "50%      0.962544     1.0   0.037456   3.745565\n",
       "75%      0.970432     1.0   0.048329   4.832852\n",
       "max      0.987748     1.0   0.811892  81.189194"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = val_df\n",
    "df[(df.interchange==0) & (df.unroll == 0) & (df.tile == 0)][['prediction','target', 'abs_diff','APE']].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df1 = df[(df.interchange==0) & (df.unroll == 0) & (df.tile == 0)]\n",
    "#joint_plot(df1, f\"Validation dataset, {loss_func} loss\")\n",
    "df2 = df\n",
    "joint_plot(df2, f\"Validation dataset, {loss_func} loss\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_ = val_df.sort_values(by=[\"APE\"])\n",
    "\n",
    "df_['x'] = range(len(df_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f298c51f828>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot('x', 'APE', 'bo', data=df_)\n",
    "\n",
    "\n",
    "plt.xlabel('scheduled program')\n",
    "plt.ylabel('APE')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "l = l.load(f\"speedup_{optimizer}_batch_norm_{batch_norm}_{loss_func}_nlayers_{len(layers_sizes)}_log_{log}_batch1001-2000_Tanh\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
